package cn.edu.scau.sec.rw.model.device_manage.Device;

import java.util.ArrayList;
import java.util.List;

public class DeviceForProcess {
	//各设备空闲时间点
	public int[] A,B,C;
	public static List<Device_Pcb> arrr=new ArrayList<Device_Pcb>();
	public DeviceForProcess(){
		A=new int[2];
		B=new int[3];
		C=new int[3];
		for(int i=0;i<2;i++)A[i]=0;
		for(int i=0;i<3;i++)B[i]=0;
		for(int i=0;i<3;i++)C[i]=0;
	}

	//来了一个新进程pcb
	public Device_Pcb ArriveOneProcess(Device_Pcb pcb) {

		arrr.add(pcb);

		if(pcb.type.equals("A")) {

			//计算空闲时间点最早的 也就是说最快有空的
			int min_=A[0];
			int pos=0;
			for(int i=1;i<2;i++) {
				if(A[i]<min_) {
					min_=A[i];
					pos=i;
				}
			}
			if(pcb.arr>=min_) {
				//更新进程开始执行的时间
				pcb.Start_IO=pcb.arr;

				//设备新的空闲时间点
				A[pos]=pcb.arr+pcb.len;
			}else {
				pcb.Start_IO=A[pos];
				A[pos]=A[pos]+pcb.len;
			}
			//更新进程执行完成的时间
			pcb.EndIO=A[pos];
			//return A[pos];

		}else if(pcb.equals("B")) {
			int min_=B[0];
			int pos=0;
			for(int i=1;i<3;i++) {
				if(B[i]<min_) {
					min_=B[i];
					pos=i;
				}
			}
			if(pcb.arr>=min_) {
				pcb.Start_IO=pcb.arr;
				B[pos]=pcb.arr+pcb.len;
			}else {
				pcb.Start_IO=B[pos];
				B[pos]=B[pos]+pcb.len;
			}
			pcb.EndIO=B[pos];
			//return B[pos];

		}else {
			int min_=C[0];
			int pos=0;
			for(int i=1;i<3;i++) {
				if(C[i]<min_) {
					min_=C[i];
					pos=i;
				}
			}
			if(pcb.arr>=min_) {
				pcb.Start_IO=pcb.arr;
				C[pos]=pcb.arr+pcb.len;
			}else {
				pcb.Start_IO=C[pos];
				C[pos]=C[pos]+pcb.len;
			}
			pcb.EndIO=C[pos];
			//return C[pos];
		}
		return pcb;
	}
}
